Newer
Older
Simple-Multiplayer-Unity3D / Multiplayer Project / Library / PackageCache / [email protected] / Editor / Views / SelectNewCodeReviewBehavior.cs
using Codice.Client.Common;
using PlasticGui;
using Unity.PlasticSCM.Editor.Settings;

namespace Unity.PlasticSCM.Editor.Views
{
    internal class SelectNewCodeReviewBehavior
    {
        internal static NewCodeReviewBehavior For(string repServer)
        {
            if (PlasticGui.Plastic.API.IsCloud(repServer))
                return AskUserIfNeeded();

            return NewCodeReviewBehavior.CreateAndOpenInDesktop;
        }

        static NewCodeReviewBehavior AskUserIfNeeded()
        {
            NewCodeReviewBehavior choice = LoadPreferences();
            if (choice != NewCodeReviewBehavior.Ask)
                return choice;

            return AskUserForNewCodeReviewBehavior();
        }

        static NewCodeReviewBehavior AskUserForNewCodeReviewBehavior()
        {
            MultiLinkLabelData dontAksMeAgainContent =
                new MultiLinkLabelData(
                    PlasticLocalization.Name.DontAskMeAgainWithAction.GetString(),
                    PlasticLocalization.Name.OtherOptions.GetString(),
                    OpenPlasticProjectSettings.InOtherFoldout
                );

            bool dontAskMeAgain;
            GuiMessage.GuiMessageResponseButton response
                = GuiMessage.Get().ShowQuestionWithCheckBox(
                    PlasticLocalization.Name.SelectNewCodeReviewBehaviorTitle.GetString(),
                    PlasticLocalization.Name.SelectNewCodeReviewBehaviorExplanation.GetString(),
                    PlasticLocalization.Name.OpenInDesktopApp.GetString(),
                    PlasticLocalization.Name.CancelButton.GetString(),
                    PlasticLocalization.Name.OpenInUnityCloud.GetString(),
                    dontAksMeAgainContent,
                    out dontAskMeAgain
                );

            NewCodeReviewBehavior choice = GetNewCodeReviewBehavior(response);

            if (dontAskMeAgain && choice != NewCodeReviewBehavior.Ask)
                SavePreference(choice);

            return choice;
        }

        static NewCodeReviewBehavior LoadPreferences()
        {
            return PlasticGuiConfig.Get().Configuration.NewCodeReviewBehavior;
        }

        static void SavePreference(NewCodeReviewBehavior choice)
        {
            PlasticGuiConfig plasticGuiConfig = PlasticGuiConfig.Get();
            plasticGuiConfig.Configuration.NewCodeReviewBehavior = choice;
            plasticGuiConfig.Save();
        }

        static NewCodeReviewBehavior GetNewCodeReviewBehavior(
            GuiMessage.GuiMessageResponseButton response)
        {
            switch (response)
            {
                case GuiMessage.GuiMessageResponseButton.Positive:
                    return NewCodeReviewBehavior.CreateAndOpenInDesktop;
                case GuiMessage.GuiMessageResponseButton.Negative:
                    return NewCodeReviewBehavior.RequestFromUnityCloud;
                case GuiMessage.GuiMessageResponseButton.Neutral:
                default:
                    return NewCodeReviewBehavior.Ask;
            }
        }
    }
}